using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._IndoorsTools._IndoorsNetwork
{
    /// <summary>
    /// <para>Thin Indoor Pathways</para>
    /// <para>Removes preliminary network pathways that are not needed for routing between selected locations on each level, reducing the network dataset size and improving its route-solving performance.</para>
    /// <para>删除在每个级别上的选定位置之间进行路由不需要的初步网络路径，从而减小网络数据集大小并提高其路由求解性能。</para>
    /// </summary>    
    [DisplayName("Thin Indoor Pathways")]
    public class ThinIndoorPathways : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public ThinIndoorPathways()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_level_features">
        /// <para>Input Level Features</para>
        /// <para>The input polygon features representing a level or levels in one or more facilities. In the ArcGIS Indoors Information Model, this will be the Levels layer. The tool processes only the levels represented by these features.</para>
        /// <para>输入面要素表示一个或多个设施点中的一个或多个层级。在 ArcGIS Indoors 信息模型中，这将是 Levels 图层。该工具仅处理这些特征所表示的级别。</para>
        /// </param>
        /// <param name="_in_pathway_features">
        /// <para>Input Pathway Features</para>
        /// <para>The input polyline features representing the preliminary pathways to be thinned. In the Indoors model, this will be the PrelimPathways layer.</para>
        /// <para>输入折线要素表示要细化的初步路径。在 Indoors 模型中，这将是 PrelimPathways 图层。</para>
        /// </param>
        /// <param name="_in_transition_features">
        /// <para>Input Transition Features</para>
        /// <para>The input polyline features representing the preliminary transitions to be thinned. In the Indoors model, this will be the PrelimTransitions layer.</para>
        /// <para>输入折线要素表示要细化的初步过渡。在 Indoors 模型中，这将是 PrelimTransitions 图层。</para>
        /// </param>
        /// <param name="_routable_locations">
        /// <para>Routable Locations</para>
        /// <para>The input point or polygon features representing the locations used to calculate routes. This can be any point or polygon features that conform to the Indoors model, or any floor-aware point or polygon layer that either is configured in the layer's Floors properties or has a LEVEL_ID field that associates the features to the level on which they are located.</para>
        /// <para>表示用于计算路径的位置的输入点或面要素。这可以是符合 Indoors 模型的任何点或面要素，也可以是在图层的楼层属性中配置或具有将要素与其所在楼层关联的LEVEL_ID字段的任何楼层感知点或面图层。</para>
        /// </param>
        /// <param name="_target_pathways">
        /// <para>Target Pathways</para>
        /// <para>The existing feature class or feature layer to which the thinned pathways will be added. In the Indoors model, this will be the Pathways layer.</para>
        /// <para>将细化路径添加到的现有要素类或要素图层。在 Indoors 模型中，这将是 Pathways 图层。</para>
        /// </param>
        /// <param name="_target_transitions">
        /// <para>Target Transitions</para>
        /// <para>The existing feature class or feature to which thinned transitions will be added. In the Indoors model, this will be the Transitions layer.</para>
        /// <para>将添加细化过渡的现有要素类或要素。在 Indoors 模型中，这将是 Transitions 图层。</para>
        /// </param>
        public ThinIndoorPathways(object _in_level_features, object _in_pathway_features, object _in_transition_features, List<object> _routable_locations, object _target_pathways, object _target_transitions)
        {
            this._in_level_features = _in_level_features;
            this._in_pathway_features = _in_pathway_features;
            this._in_transition_features = _in_transition_features;
            this._routable_locations = _routable_locations;
            this._target_pathways = _target_pathways;
            this._target_transitions = _target_transitions;
        }
        public override string ToolboxName => "Indoors Tools";

        public override string ToolName => "Thin Indoor Pathways";

        public override string CallName => "indoors.ThinIndoorPathways";

        public override List<string> AcceptEnvironments => [];

        public override object[] ParameterInfo => [_in_level_features, _in_pathway_features, _in_transition_features, _routable_locations, _target_pathways, _target_transitions, _search_tolerance, _neighbor_solve_count, _updated_pathways, _updated_transitions];

        /// <summary>
        /// <para>Input Level Features</para>
        /// <para>The input polygon features representing a level or levels in one or more facilities. In the ArcGIS Indoors Information Model, this will be the Levels layer. The tool processes only the levels represented by these features.</para>
        /// <para>输入面要素表示一个或多个设施点中的一个或多个层级。在 ArcGIS Indoors 信息模型中，这将是 Levels 图层。该工具仅处理这些特征所表示的级别。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Level Features")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_level_features { get; set; }


        /// <summary>
        /// <para>Input Pathway Features</para>
        /// <para>The input polyline features representing the preliminary pathways to be thinned. In the Indoors model, this will be the PrelimPathways layer.</para>
        /// <para>输入折线要素表示要细化的初步路径。在 Indoors 模型中，这将是 PrelimPathways 图层。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Pathway Features")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_pathway_features { get; set; }


        /// <summary>
        /// <para>Input Transition Features</para>
        /// <para>The input polyline features representing the preliminary transitions to be thinned. In the Indoors model, this will be the PrelimTransitions layer.</para>
        /// <para>输入折线要素表示要细化的初步过渡。在 Indoors 模型中，这将是 PrelimTransitions 图层。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Transition Features")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_transition_features { get; set; }


        /// <summary>
        /// <para>Routable Locations</para>
        /// <para>The input point or polygon features representing the locations used to calculate routes. This can be any point or polygon features that conform to the Indoors model, or any floor-aware point or polygon layer that either is configured in the layer's Floors properties or has a LEVEL_ID field that associates the features to the level on which they are located.</para>
        /// <para>表示用于计算路径的位置的输入点或面要素。这可以是符合 Indoors 模型的任何点或面要素，也可以是在图层的楼层属性中配置或具有将要素与其所在楼层关联的LEVEL_ID字段的任何楼层感知点或面图层。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Routable Locations")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public List<object> _routable_locations { get; set; }


        /// <summary>
        /// <para>Target Pathways</para>
        /// <para>The existing feature class or feature layer to which the thinned pathways will be added. In the Indoors model, this will be the Pathways layer.</para>
        /// <para>将细化路径添加到的现有要素类或要素图层。在 Indoors 模型中，这将是 Pathways 图层。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Target Pathways")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _target_pathways { get; set; }


        /// <summary>
        /// <para>Target Transitions</para>
        /// <para>The existing feature class or feature to which thinned transitions will be added. In the Indoors model, this will be the Transitions layer.</para>
        /// <para>将添加细化过渡的现有要素类或要素。在 Indoors 模型中，这将是 Transitions 图层。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Target Transitions")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _target_transitions { get; set; }


        /// <summary>
        /// <para>Search Tolerance</para>
        /// <para><xdoc>
        ///   <para>The distance, in meters, the tool will search for Routable Locations features near the input pathways. Routable Locations features farther away than this value will not be used for thinning. The default value is 5.
        ///   <para>The value must be 0 or greater.</para>
        ///   </para>
        /// </xdoc></para>
        /// <para><xdoc>
        /// <para>该工具将搜索输入路径附近的可路由位置要素的距离（以米为单位）。远于此值的可传送位置要素将不用于细化。默认值为 5。
        ///   <para>该值必须为 0 或更大。</para>
        ///   </para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Search Tolerance")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public long _search_tolerance { get; set; } = 5;


        /// <summary>
        /// <para>Neighbor Solve Count</para>
        /// <para><xdoc>
        ///   <para>The number of closest neighboring locations that will be solved when calculating routes between a given location and other routable locations in the facility. The default value is 50.
        ///   <para>The value must be 1 or greater.</para>
        ///   </para>
        /// </xdoc></para>
        /// <para><xdoc>
        /// <para>计算给定位置与设施点中其他可布线位置之间的路径时要求解的最近相邻位置数。默认值为 50。
        ///   <para>该值必须为 1 或更大。</para>
        ///   </para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Neighbor Solve Count")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public long _neighbor_solve_count { get; set; } = 50;


        /// <summary>
        /// <para>Updated Pathways</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Updated Pathways")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _updated_pathways { get; set; }


        /// <summary>
        /// <para>Updated Transitions</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Updated Transitions")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _updated_transitions { get; set; }


        public ThinIndoorPathways SetEnv()
        {
            base.SetEnv();
            return this;
        }

    }

}